package com.erp.erp_dao.bill_declareDao;

import com.erp.erp_entitys.bill_declare.*;
import com.erp.erp_entitys.business.entity.CarryDetailEntity;
import com.erp.erp_entitys.business.entity.CarryDetailProductEntity;
import com.erp.erp_entitys.business.entity.CarryDetailProductPartsEntity;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;

/**
 * 报关主信息表(BillDeclareInfo)表数据库访问层
 *
 * @author cj
 * @since 2021-01-08 17:27:56
 */
public interface IBillDeclareInfoDao {

    /**
     * 通过ID查询单条数据
     *
     * @param declareId 主键
     * @return 实例对象
     */
    BillDeclareInfo queryInfoById(Integer declareId);

    /**
     * 查询指定行数据
     *
     * @param offset 查询起始位置
     * @param limit  查询条数
     * @return 对象列表
     */
    List<BillDeclareInfo> queryAllInfoByLimit(@Param("offset") int offset, @Param("limit") int limit);


    /**
     * 通过实体作为筛选条件查询
     *
     * @param billDeclareInfo 实例对象
     * @return 对象列表
     */
    List<BillDeclareInfo> queryInfoAll(BillDeclareInfo billDeclareInfo);

    /**
     * 新增数据
     *
     * @param billDeclareInfo 实例对象
     * @return 影响行数
     */
    int insertInfo(BillDeclareInfo billDeclareInfo);

    /**
     * 修改数据
     *
     * @param billDeclareInfo 实例对象
     * @return 影响行数
     */
    int updateInfo(BillDeclareInfo billDeclareInfo);

    /**
     * 通过主键删除数据
     *
     * @param declareId 主键
     * @return 影响行数
     */
    int deleteInfoById(Integer declareId);
    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    BillDeclareFile queryFileById(Integer id);

    /**
     * 查询指定行数据
     *
     * @param offset 查询起始位置
     * @param limit  查询条数
     * @return 对象列表
     */
    List<BillDeclareFile> queryAllFileByLimit(@Param("offset") int offset, @Param("limit") int limit);


    /**
     * 通过实体作为筛选条件查询
     *
     * @param billDeclareFile 实例对象
     * @return 对象列表
     */
    List<BillDeclareFile> queryFileAll(BillDeclareFile billDeclareFile);

    /**
     * 新增数据
     *
     * @param billDeclareFile 实例对象
     * @return 影响行数
     */
    int insertFile(BillDeclareFile billDeclareFile);

    /**
     * 修改数据
     *
     * @param billDeclareFile 实例对象
     * @return 影响行数
     */
    int updateFile(BillDeclareFile billDeclareFile);

    /**
     * 通过主键删除数据
     *
     * @param id 主键
     * @return 影响行数
     */
    int deleteFileById(Integer id);
    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    BillDeclareLog queryLogById(Integer id);

    /**
     * 查询指定行数据
     *
     * @param offset 查询起始位置
     * @param limit  查询条数
     * @return 对象列表
     */
    List<BillDeclareLog> queryAllLogByLimit(@Param("offset") int offset, @Param("limit") int limit);


    /**
     * 通过实体作为筛选条件查询
     *
     * @param billDeclareLog 实例对象
     * @return 对象列表
     */
    List<BillDeclareLog> queryAllLog(BillDeclareLog billDeclareLog);

    /**
     * 新增数据
     *
     * @param billDeclareLog 实例对象
     * @return 影响行数
     */
    int insertLog(BillDeclareLog billDeclareLog);

    /**
     * 修改数据
     *
     * @param billDeclareLog 实例对象
     * @return 影响行数
     */
    int updateLog(BillDeclareLog billDeclareLog);

    /**
     * 通过主键删除数据
     *
     * @param id 主键
     * @return 影响行数
     */
    int deleteLogById(Integer id);
    /**
     * 通过ID查询单条数据
     *
     * @param declareProductId 主键
     * @return 实例对象
     */
    BillDeclareProductInfo queryProductInfoById(Integer declareProductId);

    /**
     * 查询指定行数据
     *
     * @param offset 查询起始位置
     * @param limit  查询条数
     * @return 对象列表
     */
    List<BillDeclareProductInfo> queryAllProductInfoByLimit(@Param("offset") int offset, @Param("limit") int limit);


    /**
     * 通过实体作为筛选条件查询
     *
     * @param billDeclareProductInfo 实例对象
     * @return 对象列表
     */
    List<BillDeclareProductInfo> queryAllProductInfo(BillDeclareProductInfo billDeclareProductInfo);

    /**
     * 新增数据
     *
     * @param billDeclareProductInfo 实例对象
     * @return 影响行数
     */
    int insertProductInfo(BillDeclareProductInfo billDeclareProductInfo);

    /**
     * 修改数据
     *
     * @param billDeclareProductInfo 实例对象
     * @return 影响行数
     */
    int updateProductInfo(BillDeclareProductInfo billDeclareProductInfo);

    /**
     * 通过主键删除数据
     *
     * @param declareProductId 主键
     * @return 影响行数
     */
    int deleteProductInfoById(Integer declareProductId);


    List<BillDeclareInfo> selectAllInfo();

    List<BillDeclareInfo> selectAllInfobySearch(InfoSearch search);

    List<BillDeclareProductInfo> queryAllProductInfoByBillId(Integer billId);
    List<CarryDetailEntity> queryCarryBySearchBillDeclare(carryInfoSearch search);
    List<CarryDetailProductPartsEntity> queryCarryPartsByProductId(Integer id);
    List<CarryDetailProductEntity> queryCarryProductByCarryId(Integer id);

    List<CarryDetailProductPartsEntity> selectPartsByProduct(CarryDetailProductEntity productEntity);

    BigDecimal selectLastAmount(BillDeclareProductInfo pro);

    logo selectLogo(Integer declare_id);

    String selectpickupdate(String billNo);

    List<BillDeclareInfo> checkBillNo(String invoicenumber);

    List<BillDeclareInfo> selectStatSearch(statSearch search);
}